This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document.
if(!require(dplyr)){
install.packages('dplyr', repos='http://cran.us.r-project.org')
library(dplyr)
}
## Loading required package: dplyr
## Warning: package 'dplyr' was built under R version 4.2.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
if(!require(stringr)){
install.packages('stringr', repos='http://cran.us.r-project.org')
library(stringr)
}
## Loading required package: stringr
## Warning: package 'stringr' was built under R version 4.2.2
if(!require(ggplot2)){
install.packages('ggplot2', repos='http://cran.us.r-project.org')
library(ggplot2)
}
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.2
if(!require(tidyr)){
install.packages('tidyr', repos='http://cran.us.r-project.org')
library(tidyr)
}
## Loading required package: tidyr
## Warning: package 'tidyr' was built under R version 4.2.2
if(!require(corrplot)){
install.packages('corrplot', repos='http://cran.us.r-project.org')
library(corrplot)
}
## Loading required package: corrplot
## Warning: package 'corrplot' was built under R version 4.2.1
## corrplot 0.92 loaded
if(!require(GGally)){
install.packages('GGally', repos='http://cran.us.r-project.org')
library(GGally)
}
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.2.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
if(!require(factoextra)){
install.packages('factoextra', repos='http://cran.us.r-project.org')
library(factoextra)
}
## Loading required package: factoextra
## Warning: package 'factoextra' was built under R version 4.2.1
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
if(!require(cluster)){
install.packages('cluster', repos='http://cran.us.r-project.org')
library(cluster)
}
## Loading required package: cluster
## Warning: package 'cluster' was built under R version 4.2.2
if(!require(FactoMineR)){
install.packages('FactoMineR', repos='http://cran.us.r-project.org')
library(FactoMineR)
}
## Loading required package: FactoMineR
## Warning: package 'FactoMineR' was built under R version 4.2.2
# Carga y procesado de los datos del Panel de Indicadores de población
df_indPob <- read.csv("DataSet/panel_indicadores_distritos_barrios.csv", sep = ";", dec = ".")
str(df_indPob)
## 'data.frame': 55799 obs. of 18 variables:
## $ Orden : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Periodo.panel : chr "2019" "2019" "2019" "2019" ...
## $ ciudad : chr "Ciudad de Madrid" "Ciudad de Madrid" "Ciudad de Madrid" "Ciudad de Madrid" ...
## $ cod_distrito : int NA NA NA NA NA NA NA NA NA NA ...
## $ distrito : chr "" "" "" "" ...
## $ cod_barrio : int NA NA NA NA NA NA NA NA NA NA ...
## $ barrio : chr "" "" "" "" ...
## $ año : int 2019 2019 2019 2019 2019 2019 2019 2019 2019 2019 ...
## $ fecha_indicador : chr "01/01/2019" "01/01/2019" "01/01/2019" "01/01/2019" ...
## $ fuente_indicador : chr "Estadística Ayuntamiento de Madrid" "Estadística Ayuntamiento de Madrid" "Estadística Ayuntamiento de Madrid" "Estadística Ayuntamiento de Madrid" ...
## $ categoría_1 : chr "Características Generales del Distrito-Barrio" "Características Generales del Distrito-Barrio" "Población del distrito" "Población del distrito" ...
## $ categoría_2 : chr "" "" "Estructura de población" "Estructura de población" ...
## $ indicador_nivel1 : chr "Superficie" "Población densidad de población" "Número de Habitantes" "Número de Habitantes" ...
## $ indicador_nivel2 : chr "" "" "" "Hombres" ...
## $ indicador_nivel3 : chr "" "" "" "" ...
## $ unidad_indicador : chr "Ha" "Habitantes/Ha." "Habitantes" "Habitantes" ...
## $ indicador_completo: chr "Superficie (Ha.) " "Población densidad (hab./Ha.) " "Número Habitantes" "Población Hombres " ...
## $ valor_indicador : chr "60.446" "54" "3.266.126" "1.521.178" ...
head(df_indPob)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio barrio
## 1 1 2019 Ciudad de Madrid NA NA
## 2 2 2019 Ciudad de Madrid NA NA
## 3 3 2019 Ciudad de Madrid NA NA
## 4 4 2019 Ciudad de Madrid NA NA
## 5 5 2019 Ciudad de Madrid NA NA
## 6 6 2019 Ciudad de Madrid NA NA
## año fecha_indicador fuente_indicador
## 1 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 2 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 3 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 4 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 5 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 6 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## categoría_1 categoría_2
## 1 Características Generales del Distrito-Barrio
## 2 Características Generales del Distrito-Barrio
## 3 Población del distrito Estructura de población
## 4 Población del distrito Estructura de población
## 5 Población del distrito Estructura de población
## 6 Población del distrito Estructura de población
## indicador_nivel1 indicador_nivel2 indicador_nivel3
## 1 Superficie
## 2 Población densidad de población
## 3 Número de Habitantes
## 4 Número de Habitantes Hombres
## 5 Número de Habitantes Mujeres
## 6 Edad Media
## unidad_indicador indicador_completo valor_indicador
## 1 Ha Superficie (Ha.) 60.446
## 2 Habitantes/Ha. Población densidad (hab./Ha.) 54
## 3 Habitantes Número Habitantes 3.266.126
## 4 Habitantes Población Hombres 1.521.178
## 5 Habitantes Población Mujeres 1.744.948
## 6 Edad Edad media de la población 44,14
# cantidad de distritos y barrios en cada fichero csv
df_aux1_dist <- df_indPob %>%
count(cod_distrito, name = "Cantidad_Distritos_Distintos")
df_aux1_barr <- df_indPob %>%
count(cod_barrio, name = "Cantidad_Barios_Distintos")
head(df_aux1_dist)
## cod_distrito Cantidad_Distritos_Distintos
## 1 1 2555
## 2 2 2849
## 3 3 2538
## 4 4 2523
## 5 5 2526
## 6 6 2546
head(df_aux1_barr)
## cod_barrio Cantidad_Barios_Distintos
## 1 11 321
## 2 12 322
## 3 13 313
## 4 14 322
## 5 15 322
## 6 16 312
df_EstadoViviendas <- df_indPob %>%
filter(str_detect(indicador_nivel2, 'Viviendas en estado | no costa'))
df_EstadoViviendas <- df_EstadoViviendas %>%
mutate(valor_indicador = as.numeric(gsub("\\.", "", valor_indicador)))
## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción
df_EstadoViviendas$indicador_completo <- str_trim(df_EstadoViviendas$indicador_completo)
head(df_EstadoViviendas)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio barrio
## 1 187 2019 Ciudad de Madrid NA NA
## 2 188 2019 Ciudad de Madrid NA NA
## 3 189 2019 Ciudad de Madrid NA NA
## 4 190 2019 Ciudad de Madrid NA NA
## 5 191 2019 Ciudad de Madrid NA NA
## 6 436 2019 Ciudad de Madrid 1 Centro NA
## año fecha_indicador fuente_indicador categoría_1
## 1 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 2 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 3 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 4 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 5 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 6 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## categoría_2 indicador_nivel1 indicador_nivel2
## 1 Número de viviendas Viviendas en estado ruinoso
## 2 Número de viviendas Viviendas en estado malo
## 3 Número de viviendas Viviendas en estado deficiente
## 4 Número de viviendas Viviendas en estado bueno
## 5 Número de viviendas Estado de la vivienda no costa
## 6 Número de viviendas Viviendas en estado ruinoso
## indicador_nivel3 unidad_indicador indicador_completo
## 1 Viviendas Viviendas en estado ruinoso
## 2 Viviendas Viviendas en estado malo
## 3 Viviendas Viviendas en estado deficiente
## 4 Viviendas Viviendas en estado bueno
## 5 Viviendas Estado de la vivienda no costa
## 6 Viviendas Viviendas en estado ruinoso
## valor_indicador
## 1 3445
## 2 12705
## 3 66775
## 4 1420265
## 5 27770
## 6 330
# subconjunto registros por estado de viviendas Totales en Madrid
df_EstadoViviendasTotales <- df_EstadoViviendas %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador) %>%
mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))
head(df_EstadoViviendasTotales)
## ciudad indicador_completo valor_indicador porcentaje
## 1 Ciudad de Madrid Viviendas en estado ruinoso 3445 0.23
## 2 Ciudad de Madrid Viviendas en estado malo 12705 0.83
## 3 Ciudad de Madrid Viviendas en estado deficiente 66775 4.36
## 4 Ciudad de Madrid Viviendas en estado bueno 1420265 92.77
## 5 Ciudad de Madrid Estado de la vivienda no costa 27770 1.81
# subconjunto registros por estado de viviendas por Distritos en Madrid
df_EstadoViviendasDist <- df_EstadoViviendas %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
filter(!is.na(cod_distrito)) %>%
group_by(distrito)
# sustitución de los valores NA por la media para cada tipo de estado
indicador <- unique(df_EstadoViviendasDist$indicador_completo)
# Itera sobre cada estado de vivienda
for (estado in indicador) {
df_filtrado <- df_EstadoViviendasDist %>%
filter(indicador == estado)
medias <- mean(df_filtrado$valor_indicador, na.rm = TRUE)
df_EstadoViviendasDist <- df_EstadoViviendasDist %>%
mutate(valor_indicador = ifelse(indicador == estado & is.na(valor_indicador), medias, valor_indicador))
}
# se añade una columna con el porcentaje de viviendas por cada estado
df_EstadoViviendasDist <- df_EstadoViviendasDist %>%
group_by(indicador_completo) %>%
mutate(porcentaje = round(((valor_indicador / sum(valor_indicador)) * 100), digit=2))
name_cols <- c("Cod_Distrito", "Distrito", "Estado_Vivienda", 'Valor_Estado', 'Porcentaje_Viviendas')
colnames(df_EstadoViviendasDist) <- name_cols
# guarda los datos en un fichero csv
write.csv2(df_EstadoViviendasDist, file = 'dataset/df_estado_viviendas_dist.csv')
df1_Dist <- df_EstadoViviendasDist
head(df1_Dist)
## # A tibble: 6 × 5
## # Groups: Estado_Vivienda [5]
## Cod_Distrito Distrito Estado_Vivienda Valor_Estado Porcenta…¹
## <int> <chr> <chr> <dbl> <dbl>
## 1 1 Centro Viviendas en estado ruinoso 330 9.18
## 2 1 Centro Viviendas en estado malo 1725 12.9
## 3 1 Centro Viviendas en estado deficiente 7895 11.8
## 4 1 Centro Viviendas en estado bueno 74970 5.28
## 5 1 Centro Estado de la vivienda no costa 1875 6.75
## 6 2 Arganzuela Viviendas en estado ruinoso 540 15.0
## # … with abbreviated variable name ¹Porcentaje_Viviendas
Tasa de personas paradas por género, distritos y barrios.
# subconjunto datos Desempleo
df_Desempleo <- df_indPob %>%
filter(str_detect(indicador_nivel1, 'Número de personas paradas')) %>%
filter(str_detect(indicador_completo, 'Tasa de desempleo en'))
df_Desempleo <- df_Desempleo %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción
df_Desempleo$indicador_completo <- str_trim(df_Desempleo$indicador_completo)
head(df_Desempleo)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio barrio
## 1 70 2019 Ciudad de Madrid NA NA
## 2 71 2019 Ciudad de Madrid NA NA
## 3 72 2019 Ciudad de Madrid NA NA
## 4 74 2019 Ciudad de Madrid NA NA
## 5 75 2019 Ciudad de Madrid NA NA
## 6 76 2019 Ciudad de Madrid NA NA
## año fecha_indicador fuente_indicador
## 1 2020 01/02/2020 Estadística Ayuntamiento de Madrid
## 2 2020 01/02/2020 Estadística Ayuntamiento de Madrid
## 3 2020 01/02/2020 Estadística Ayuntamiento de Madrid
## 4 2020 01/02/2020 Estadística Ayuntamiento de Madrid
## 5 2020 01/02/2020 Estadística Ayuntamiento de Madrid
## 6 2020 01/02/2020 Estadística Ayuntamiento de Madrid
## categoría_1 categoría_2
## 1 Indicadores Población desempleo Indicadores Población desempleo
## 2 Indicadores Población desempleo Indicadores Población desempleo
## 3 Indicadores Población desempleo Indicadores Población desempleo
## 4 Indicadores Población desempleo Indicadores Población desempleo
## 5 Indicadores Población desempleo Indicadores Población desempleo
## 6 Indicadores Población desempleo Indicadores Población desempleo
## indicador_nivel1 indicador_nivel2 indicador_nivel3
## 1 Número de personas paradas Mujeres Población de 16 a 24 años
## 2 Número de personas paradas Mujeres De 25 a 44 años
## 3 Número de personas paradas Mujeres De 45 a 64 años
## 4 Número de personas paradas Hombres Población de 16 a 24 años
## 5 Número de personas paradas Hombres De 25 a 44 años
## 6 Número de personas paradas Hombres De 45 a 64 años
## unidad_indicador indicador_completo valor_indicador
## 1 Tasa Tasa de desempleo en mujeres de 16 a 24 años 4.24
## 2 Tasa Tasa de desempleo en mujeres de 25 a 44 años 7.51
## 3 Tasa Tasa de desempleo en mujeres de 45 a 64 años 9.82
## 4 Tasa Tasa de desempleo en hombres de 16 a 24 años 4.40
## 5 Tasa Tasa de desempleo en hombres de 25 a 44 años 6.03
## 6 Tasa Tasa de desempleo en hombres de 45 a 64 años 8.87
# subconjunto registros personas paradas Totales en Madrid
df_DesempleoTotales <- df_Desempleo %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_nivel2, indicador_completo, valor_indicador) %>%
group_by(indicador_nivel2) %>%
mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))
head(df_DesempleoTotales)
## # A tibble: 6 × 5
## # Groups: indicador_nivel2 [2]
## ciudad indicador_nivel2 indicador_completo valor…¹ porce…²
## <chr> <chr> <chr> <dbl> <dbl>
## 1 Ciudad de Madrid Mujeres Tasa de desempleo en mujere… 4.24 5.97
## 2 Ciudad de Madrid Mujeres Tasa de desempleo en mujere… 7.51 10.6
## 3 Ciudad de Madrid Mujeres Tasa de desempleo en mujere… 9.82 13.8
## 4 Ciudad de Madrid Hombres Tasa de desempleo en hombre… 4.4 7.06
## 5 Ciudad de Madrid Hombres Tasa de desempleo en hombre… 6.03 9.67
## 6 Ciudad de Madrid Hombres Tasa de desempleo en hombre… 8.87 14.2
## # … with abbreviated variable names ¹valor_indicador, ²porcentaje
# subconjunto registros personas paradas Totales en los Distritos de Madrid
df_DesempleoDist <- df_Desempleo %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
#group_by(distrito, indicador_nivel2)
group_by(distrito, indicador_completo)
name_cols <- c("Cod_Distrito", "Distrito", "Tasa_Desempleo", 'Valor_Tasa')
colnames(df_DesempleoDist) <- name_cols
# guarda los datos en un fichero csv
write.csv2(df_DesempleoDist, file = 'dataset/df_desempleo_dist.csv')
df2_Dist <- df_DesempleoDist
head(df2_Dist)
## # A tibble: 6 × 4
## # Groups: Distrito, Tasa_Desempleo [6]
## Cod_Distrito Distrito Tasa_Desempleo Valor_Tasa
## <int> <chr> <chr> <dbl>
## 1 1 Centro Tasa de desempleo en mujeres de 16 a 24 años 2.87
## 2 1 Centro Tasa de desempleo en mujeres de 25 a 44 años 6.01
## 3 1 Centro Tasa de desempleo en mujeres de 45 a 64 años 9.91
## 4 1 Centro Tasa de desempleo en hombres de 16 a 24 años 3.03
## 5 1 Centro Tasa de desempleo en hombres de 25 a 44 años 5.34
## 6 1 Centro Tasa de desempleo en hombres de 45 a 64 años 10.2
# subconjunto registros personas paradas Totales en los Barrios de Madrid
df_DesempleoBarr <- df_Desempleo %>%
filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, cod_barrio, barrio, indicador_nivel2,indicador_completo, valor_indicador) %>%
group_by(barrio) %>%
mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))
write.csv2(df_DesempleoBarr, file = 'dataset/df_desempleo_barr.csv')
head(df_DesempleoBarr)
## # A tibble: 6 × 8
## # Groups: barrio [1]
## cod_distrito distrito cod_barrio barrio indicador_n…¹ indic…² valor…³ porce…⁴
## <int> <chr> <int> <chr> <chr> <chr> <dbl> <dbl>
## 1 1 Centro 11 Palacio Mujeres Tasa d… 1.67 1.32
## 2 1 Centro 11 Palacio Mujeres Tasa d… 5.94 4.68
## 3 1 Centro 11 Palacio Mujeres Tasa d… 9.23 7.27
## 4 1 Centro 11 Palacio Hombres Tasa d… 3.49 2.75
## 5 1 Centro 11 Palacio Hombres Tasa d… 6.32 4.98
## 6 1 Centro 11 Palacio Hombres Tasa d… 10.6 8.36
## # … with abbreviated variable names ¹indicador_nivel2, ²indicador_completo,
## # ³valor_indicador, ⁴porcentaje
# gráficas personas paradas por distritos 2020
df1 <- df_Desempleo
ggplot(df1, aes(x = distrito , y = valor_indicador, color = indicador_completo, group = indicador_nivel2)) +
geom_line() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Renta media anual.
# subconjunto datos Renta
df_Renta <- df_indPob %>%
filter(año == '2018') %>%
filter(str_detect(indicador_nivel1, 'Renta')) %>%
filter(str_detect(indicador_nivel2, 'Neta anual'))
df_Renta <- df_Renta %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
df_Renta$indicador_completo <- str_trim(df_Renta$indicador_completo)
head(df_Renta)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio
## 1 37311 2022 Ciudad de Madrid NA NA
## 2 37528 2022 Ciudad de Madrid 1 Centro NA
## 3 37707 2022 Ciudad de Madrid 1 Centro 11
## 4 37816 2022 Ciudad de Madrid 1 Centro 12
## 5 37925 2022 Ciudad de Madrid 1 Centro 13
## 6 38034 2022 Ciudad de Madrid 1 Centro 14
## barrio año fecha_indicador fuente_indicador
## 1 2018 2018 Estadística Ayuntamiento de Madrid
## 2 2018 2018 Estadística Ayuntamiento de Madrid
## 3 Palacio 2018 2018 Estadística Ayuntamiento de Madrid
## 4 Embajadores 2018 2018 Estadística Ayuntamiento de Madrid
## 5 Cortes 2018 2018 Estadística Ayuntamiento de Madrid
## 6 Justicia 2018 2018 Estadística Ayuntamiento de Madrid
## categoría_1 categoría_2 indicador_nivel1
## 1 Indicadores Económicos Indicadores económicos Renta
## 2 Indicadores Económicos Indicadores económicos Renta
## 3 Indicadores Económicos Indicadores económicos Renta
## 4 Indicadores Económicos Indicadores económicos Renta
## 5 Indicadores Económicos Indicadores económicos Renta
## 6 Indicadores Económicos Indicadores económicos Renta
## indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Neta anual Renta
## 2 Neta anual Renta
## 3 Neta anual Renta
## 4 Neta anual Renta
## 5 Neta anual Renta
## 6 Neta anual Renta
## indicador_completo valor_indicador
## 1 Renta neta media anual de los hogares (Urban Audit) 42.283
## 2 Renta neta media anual de los hogares (Urban Audit) 36.072
## 3 Renta neta media anual de los hogares (Urban Audit) 38.974
## 4 Renta neta media anual de los hogares (Urban Audit) 29.472
## 5 Renta neta media anual de los hogares (Urban Audit) 40.963
## 6 Renta neta media anual de los hogares (Urban Audit) 48.203
# subconjunto Renta media anual Totales en Madrid
df_Rentas <- df_Renta %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador) %>%
mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))
head(df_Rentas)
## ciudad indicador_completo
## 1 Ciudad de Madrid Renta neta media anual de los hogares (Urban Audit)
## valor_indicador porcentaje
## 1 42.283 100
# subconjunto Renta media anual en los Distritos de Madrid
df_RentaDist <- df_Renta %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
group_by(distrito)
name_cols <- c("Cod_Distrito", "Distrito", "Renta_Media", 'Valor_Renta')
colnames(df_RentaDist) <- name_cols
write.csv2(df_RentaDist, file = 'dataset/df_renta_dist.csv')
df3_Dist <- df_RentaDist
head(df3_Dist)
## # A tibble: 6 × 4
## # Groups: Distrito [6]
## Cod_Distrito Distrito Renta_Media Valor…¹
## <int> <chr> <chr> <dbl>
## 1 1 Centro Renta neta media anual de los hogares (Urban … 36.1
## 2 2 Arganzuela Renta neta media anual de los hogares (Urban … 43.8
## 3 3 Retiro Renta neta media anual de los hogares (Urban … 55.8
## 4 4 Salamanca Renta neta media anual de los hogares (Urban … 61.5
## 5 5 Chamartín Renta neta media anual de los hogares (Urban … 70.7
## 6 6 Tetuán Renta neta media anual de los hogares (Urban … 37.6
## # … with abbreviated variable name ¹Valor_Renta
# subconjunto Renta media anual en los Barrios de Madrid
df_RentaBarr <- df_Renta %>%
filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
group_by(barrio)
write.csv2(df_RentaBarr, file = 'dataset/df_renta_barr.csv')
head(df_RentaBarr)
## # A tibble: 6 × 6
## # Groups: barrio [6]
## cod_distrito distrito cod_barrio barrio indicador_completo valor…¹
## <int> <chr> <int> <chr> <chr> <dbl>
## 1 1 Centro 11 Palacio Renta neta media anual d… 39.0
## 2 1 Centro 12 Embajadores Renta neta media anual d… 29.5
## 3 1 Centro 13 Cortes Renta neta media anual d… 41.0
## 4 1 Centro 14 Justicia Renta neta media anual d… 48.2
## 5 1 Centro 15 Universidad Renta neta media anual d… 35.3
## 6 1 Centro 16 Sol Renta neta media anual d… 35.1
## # … with abbreviated variable name ¹valor_indicador
# subconjunto datos Edad Media
df_Edad <- df_indPob %>%
filter(año == '2019') %>%
filter(str_detect(indicador_nivel1, 'Edad Media'))
df_Edad <- df_Edad %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
df_Edad$indicador_completo <- str_trim(df_Edad$indicador_completo)
head(df_Edad)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio
## 1 6 2019 Ciudad de Madrid NA NA
## 2 288 2019 Ciudad de Madrid 1 Centro NA
## 3 514 2019 Ciudad de Madrid 1 Centro 11
## 4 634 2019 Ciudad de Madrid 1 Centro 12
## 5 754 2019 Ciudad de Madrid 1 Centro 13
## 6 874 2019 Ciudad de Madrid 1 Centro 14
## barrio año fecha_indicador fuente_indicador
## 1 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 2 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 3 Palacio 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 4 Embajadores 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 5 Cortes 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## 6 Justicia 2019 01/01/2019 Estadística Ayuntamiento de Madrid
## categoría_1 categoría_2 indicador_nivel1
## 1 Población del distrito Estructura de población Edad Media
## 2 Población del distrito Estructura de población Edad Media
## 3 Población del distrito Estructura de población Edad Media
## 4 Población del distrito Estructura de población Edad Media
## 5 Población del distrito Estructura de población Edad Media
## 6 Población del distrito Estructura de población Edad Media
## indicador_nivel2 indicador_nivel3 unidad_indicador indicador_completo
## 1 Edad Edad media de la población
## 2 Edad Edad media de la población
## 3 Edad Edad media de la población
## 4 Edad Edad media de la población
## 5 Edad Edad media de la población
## 6 Edad Edad media de la población
## valor_indicador
## 1 44.14
## 2 44.09
## 3 45.80
## 4 42.88
## 5 45.02
## 6 44.30
# subconjunto Edad media anual Totales en Madrid
df_Edades <- df_Edad %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador)
head(df_Edades)
## ciudad indicador_completo valor_indicador
## 1 Ciudad de Madrid Edad media de la población 44.14
# subconjunto Edad media anual en los Distritos de Madrid
df_EdadDist <- df_Edad %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
group_by(distrito)
name_cols <- c("Cod_Distrito", "Distrito", "Edad_Media", 'Valor_Edad')
colnames(df_EdadDist) <- name_cols
write.csv2(df_EdadDist, file = 'dataset/df_edad_dist.csv')
df4_Dist <- df_EdadDist
head(df4_Dist)
## # A tibble: 6 × 4
## # Groups: Distrito [6]
## Cod_Distrito Distrito Edad_Media Valor_Edad
## <int> <chr> <chr> <dbl>
## 1 1 Centro Edad media de la población 44.1
## 2 2 Arganzuela Edad media de la población 44.6
## 3 3 Retiro Edad media de la población 47.1
## 4 4 Salamanca Edad media de la población 46.3
## 5 5 Chamartín Edad media de la población 45.5
## 6 6 Tetuán Edad media de la población 44.2
# subconjunto Edad media anual en los Barrios de Madrid
df_EdadBarr <- df_Edad %>%
filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
group_by(barrio)
write.csv2(df_EdadBarr, file = 'dataset/df_edad_barr.csv')
head(df_EdadBarr)
## # A tibble: 6 × 6
## # Groups: barrio [6]
## cod_distrito distrito cod_barrio barrio indicador_completo valor…¹
## <int> <chr> <int> <chr> <chr> <dbl>
## 1 1 Centro 11 Palacio Edad media de la poblaci… 45.8
## 2 1 Centro 12 Embajadores Edad media de la poblaci… 42.9
## 3 1 Centro 13 Cortes Edad media de la poblaci… 45.0
## 4 1 Centro 14 Justicia Edad media de la poblaci… 44.3
## 5 1 Centro 15 Universidad Edad media de la poblaci… 44.0
## 6 1 Centro 16 Sol Edad media de la poblaci… 44.7
## # … with abbreviated variable name ¹valor_indicador
# subconjunto datos Densidad de Población
df_Densidad <- df_indPob %>%
filter(año == '2020') %>%
filter(str_detect(indicador_nivel1, 'Densidad de población'))
df_Densidad <- df_Densidad %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
df_Densidad$indicador_completo <- str_trim(df_Densidad$indicador_completo)
head(df_Densidad)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio
## 1 20750 2020-21 Ciudad de Madrid NA NA
## 2 21063 2020-21 Ciudad de Madrid 1 Centro NA
## 3 21279 2020-21 Ciudad de Madrid 1 Centro 11
## 4 21373 2020-21 Ciudad de Madrid 1 Centro 12
## 5 21468 2020-21 Ciudad de Madrid 1 Centro 13
## 6 21554 2020-21 Ciudad de Madrid 1 Centro 14
## barrio año fecha_indicador fuente_indicador
## 1 2020 01/01/2020 Estadística Ayuntamiento de Madrid
## 2 2020 01/01/2020 Estadística Ayuntamiento de Madrid
## 3 Palacio 2020 01/01/2020 Estadística Ayuntamiento de Madrid
## 4 Embajadores 2020 01/01/2020 Estadística Ayuntamiento de Madrid
## 5 Cortes 2020 01/01/2020 Estadística Ayuntamiento de Madrid
## 6 Justicia 2020 01/01/2020 Estadística Ayuntamiento de Madrid
## categoría_1 categoría_2
## 1 Características Generales del Distrito-Barrio
## 2 Características Generales del Distrito-Barrio
## 3 Características Generales del Distrito-Barrio
## 4 Características Generales del Distrito-Barrio
## 5 Características Generales del Distrito-Barrio
## 6 Características Generales del Distrito-Barrio
## indicador_nivel1 indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Densidad de población Habitantes/Ha.
## 2 Densidad de población Habitantes/Ha.
## 3 Densidad de población Habitantes/Ha.
## 4 Densidad de población Habitantes/Ha.
## 5 Densidad de población Habitantes/Ha.
## 6 Densidad de población Habitantes/Ha.
## indicador_completo valor_indicador
## 1 Población densidad (hab./Ha.) 55.17
## 2 Población densidad (hab./Ha.) 269.00
## 3 Población densidad (hab./Ha.) 161.00
## 4 Población densidad (hab./Ha.) 455.00
## 5 Población densidad (hab./Ha.) 182.00
## 6 Población densidad (hab./Ha.) 244.00
# subconjunto Densidad de Población anual Totales en Madrid
df_Densidades <- df_Densidad %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador)
head(df_Densidades)
## ciudad indicador_completo valor_indicador
## 1 Ciudad de Madrid Población densidad (hab./Ha.) 55.17
# subconjunto Densidad de Población anual en los Distritos de Madrid
df_DensidadDist <- df_Densidad %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
group_by(distrito)
name_cols <- c("Cod_Distrito", "Distrito", "Densidad_Poblacion", 'Valor_DensidadPob')
colnames(df_DensidadDist) <- name_cols
write.csv2(df_DensidadDist, file = 'dataset/df_densidad_dist.csv')
df5_Dist <- df_DensidadDist
head(df5_Dist)
## # A tibble: 6 × 4
## # Groups: Distrito [6]
## Cod_Distrito Distrito Densidad_Poblacion Valor_DensidadPob
## <int> <chr> <chr> <dbl>
## 1 1 Centro Población densidad (hab./Ha.) 269
## 2 2 Arganzuela Población densidad (hab./Ha.) 241
## 3 3 Retiro Población densidad (hab./Ha.) 220
## 4 4 Salamanca Población densidad (hab./Ha.) 274
## 5 5 Chamartín Población densidad (hab./Ha.) 161
## 6 6 Tetuán Población densidad (hab./Ha.) 300
# subconjunto Densidad de Población anual en los Barrios de Madrid
df_DensidadBarr <- df_Densidad %>%
filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
group_by(barrio)
write.csv2(df_DensidadBarr, file = 'dataset/df_densidad_barr.csv')
head(df_DensidadBarr)
## # A tibble: 6 × 6
## # Groups: barrio [6]
## cod_distrito distrito cod_barrio barrio indicador_completo valor…¹
## <int> <chr> <int> <chr> <chr> <dbl>
## 1 1 Centro 11 Palacio Población densidad (hab.… 161
## 2 1 Centro 12 Embajadores Población densidad (hab.… 455
## 3 1 Centro 13 Cortes Población densidad (hab.… 182
## 4 1 Centro 14 Justicia Población densidad (hab.… 244
## 5 1 Centro 15 Universidad Población densidad (hab.… 353
## 6 1 Centro 16 Sol Población densidad (hab.… 171
## # … with abbreviated variable name ¹valor_indicador
# subconjunto datos Seguridad Ciudadana
df_Seguridad <- df_indPob %>%
filter(año == '2019') %>%
filter(str_detect(indicador_nivel2, 'Seguridad'))
df_Seguridad <- df_Seguridad %>%
mutate(valor_indicador = as.numeric(gsub("\\.", "", valor_indicador)))
df_Seguridad$indicador_completo <- str_trim(df_Seguridad$indicador_completo)
head(df_Seguridad)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio barrio
## 1 217 2019 Ciudad de Madrid NA NA
## 2 218 2019 Ciudad de Madrid NA NA
## 3 219 2019 Ciudad de Madrid NA NA
## 4 220 2019 Ciudad de Madrid NA NA
## 5 451 2019 Ciudad de Madrid 1 Centro NA
## 6 452 2019 Ciudad de Madrid 1 Centro NA
## año fecha_indicador fuente_indicador
## 1 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 2 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 3 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 4 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 5 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 6 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## categoría_1 categoría_2 indicador_nivel1
## 1 Seguridad Intervención de la Policía Municipal Número de intervenciones
## 2 Seguridad Intervención de la Policía Municipal Número de intervenciones
## 3 Seguridad Intervención de la Policía Municipal Número de intervenciones
## 4 Seguridad Intervención de la Policía Municipal Número de intervenciones
## 5 Seguridad Intervención de la Policía Municipal Número de intervenciones
## 6 Seguridad Intervención de la Policía Municipal Número de intervenciones
## indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Seguridad Población delitos relacionados con personas Intervenciones
## 2 Seguridad Tenencia ilicita de armas Intervenciones
## 3 Seguridad Patrimonio Intervenciones
## 4 Seguridad Tenencia y consumo de drogas Intervenciones
## 5 Seguridad Población delitos relacionados con personas Intervenciones
## 6 Seguridad Tenencia ilicita de armas Intervenciones
## indicador_completo
## 1 Intervenciones de la Policía Municipal en materia de seguridad: delitos relacionados con las personas
## 2 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia de armas
## 3 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con el patrimonio
## 4 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia y consumo de drogas
## 5 Intervenciones de la Policía Municipal en materia de seguridad: delitos relacionados con las personas
## 6 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia de armas
## valor_indicador
## 1 5455
## 2 1362
## 3 6984
## 4 8346
## 5 943
## 6 716
# subconjunto Seguridad de Población anual Totales en Madrid
df_Seguridades <- df_Seguridad %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador) %>%
mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))
head(df_Seguridades)
## ciudad
## 1 Ciudad de Madrid
## 2 Ciudad de Madrid
## 3 Ciudad de Madrid
## 4 Ciudad de Madrid
## indicador_completo
## 1 Intervenciones de la Policía Municipal en materia de seguridad: delitos relacionados con las personas
## 2 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia de armas
## 3 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con el patrimonio
## 4 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia y consumo de drogas
## valor_indicador porcentaje
## 1 5455 24.63
## 2 1362 6.15
## 3 6984 31.53
## 4 8346 37.68
# subconjunto Seguridad de Población anual en los Distritos de Madrid
df_SeguridadDist <- df_Seguridad %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
group_by(distrito) %>%
mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))
name_cols <- c("Cod_Distrito", "Distrito", "Tipo_Intervencion", 'Valor_Intevencion', 'Porcentaje_Intervenciones')
colnames(df_SeguridadDist) <- name_cols
write.csv2(df_SeguridadDist, file = 'dataset/df_seguridad_counts_dist.csv')
df6_Dist <- df_SeguridadDist
head(df6_Dist)
## # A tibble: 6 × 5
## # Groups: Distrito [2]
## Cod_Distrito Distrito Tipo_Intervencion Valor…¹ Porce…²
## <int> <chr> <chr> <dbl> <dbl>
## 1 1 Centro Intervenciones de la Policía Municipa… 943 18.0
## 2 1 Centro Intervenciones de la Policía Municipa… 716 13.6
## 3 1 Centro Intervenciones de la Policía Municipa… 1439 27.4
## 4 1 Centro Intervenciones de la Policía Municipa… 2155 41.0
## 5 2 Arganzuela Intervenciones de la Policía Municipa… 199 24.5
## 6 2 Arganzuela Intervenciones de la Policía Municipa… 19 2.34
## # … with abbreviated variable names ¹Valor_Intevencion,
## # ²Porcentaje_Intervenciones
# subconjunto Seguridad de Población anual en los Distritos de Madrid
df_Seguridad_Dist <- df_Seguridad %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, valor_indicador) %>%
group_by(cod_distrito,distrito) %>%
summarize(total = sum(valor_indicador), .groups = "drop")
write.csv2(df_Seguridad_Dist, file = 'dataset/df_seguridad_dist.csv')
head(df_Seguridad_Dist)
## # A tibble: 6 × 3
## cod_distrito distrito total
## <int> <chr> <dbl>
## 1 1 Centro 5253
## 2 2 Arganzuela 811
## 3 3 Retiro 282
## 4 4 Salamanca 1025
## 5 5 Chamartín 438
## 6 6 Tetuán 860
# subconjunto datos Catastro
df_Catastro <- df_indPob %>%
filter(año == '2019') %>%
filter(str_detect(indicador_nivel1, 'Valor catastral'))
df_Catastro <- df_Catastro %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
df_Catastro$indicador_completo <- str_trim(df_Catastro$indicador_completo)
head(df_Catastro)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio barrio
## 1 192 2019 Ciudad de Madrid NA NA
## 2 193 2019 Ciudad de Madrid NA NA
## 3 441 2019 Ciudad de Madrid 1 Centro NA
## 4 442 2019 Ciudad de Madrid 1 Centro NA
## 5 583 2019 Ciudad de Madrid 1 Centro 11 Palacio
## 6 584 2019 Ciudad de Madrid 1 Centro 11 Palacio
## año fecha_indicador fuente_indicador categoría_1
## 1 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 2 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 3 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 4 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 5 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## 6 2019 2019 Estadística Ayuntamiento de Madrid Vivienda
## categoría_2 indicador_nivel1 indicador_nivel2 indicador_nivel3
## 1 Valor catastral Personas físicas
## 2 Valor catastral Personas jurídicas
## 3 Valor catastral Personas físicas
## 4 Valor catastral Personas jurídicas
## 5 Valor catastral Personas físicas
## 6 Valor catastral Personas jurídicas
## unidad_indicador
## 1 Valor
## 2 Valor
## 3 Valor
## 4 Valor
## 5 Valor
## 6 Valor
## indicador_completo
## 1 Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 2 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
## 3 Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 4 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
## 5 Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 6 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
## valor_indicador
## 1 90.9
## 2 369.0
## 3 117.0
## 4 593.0
## 5 124.0
## 6 490.0
# subconjunto Catastro Totales en Madrid
df_Catastros <- df_Catastro %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador)
head(df_Catastros)
## ciudad
## 1 Ciudad de Madrid
## 2 Ciudad de Madrid
## indicador_completo
## 1 Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 2 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
## valor_indicador
## 1 90.9
## 2 369.0
# subconjunto Catastro en los Distritos de Madrid
df_CatastroDist <- df_Catastro %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
group_by(distrito)
name_cols <- c("Cod_Distrito", "Distrito", "Tipo_Catastro", 'Valor_catastro')
colnames(df_CatastroDist) <- name_cols
write.csv2(df_CatastroDist, file = 'dataset/df_catastro_dist.csv')
df7_Dist <- df_CatastroDist
head(df7_Dist)
## # A tibble: 6 × 4
## # Groups: Distrito [3]
## Cod_Distrito Distrito Tipo_Catastro Valor…¹
## <int> <chr> <chr> <dbl>
## 1 1 Centro Valor catastral medio de los bienes inmuebles… 117
## 2 1 Centro Valor catastral medio de los bienes inmuebles… 593
## 3 2 Arganzuela Valor catastral medio de los bienes inmuebles… 84.1
## 4 2 Arganzuela Valor catastral medio de los bienes inmuebles… 297
## 5 3 Retiro Valor catastral medio de los bienes inmuebles… 132
## 6 3 Retiro Valor catastral medio de los bienes inmuebles… 483
## # … with abbreviated variable name ¹Valor_catastro
# subconjunto Catastro en los Barrios de Madrid
df_CatastroBarr <- df_Catastro %>%
filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
group_by(barrio)
write.csv2(df_CatastroBarr, file = 'dataset/df_catastro_barr.csv')
head(df_CatastroBarr)
## # A tibble: 6 × 6
## # Groups: barrio [3]
## cod_distrito distrito cod_barrio barrio indicador_completo valor…¹
## <int> <chr> <int> <chr> <chr> <dbl>
## 1 1 Centro 11 Palacio Valor catastral medio de… 124
## 2 1 Centro 11 Palacio Valor catastral medio de… 490
## 3 1 Centro 12 Embajadores Valor catastral medio de… 86.2
## 4 1 Centro 12 Embajadores Valor catastral medio de… 268
## 5 1 Centro 13 Cortes Valor catastral medio de… 147
## 6 1 Centro 13 Cortes Valor catastral medio de… 1.06
## # … with abbreviated variable name ¹valor_indicador
# subconjunto datos Detenciones
df_Detenciones <- df_indPob %>%
filter(año == '2019') %>%
filter(str_detect(indicador_nivel1, 'personas detenidas'))
df_Detenciones <- df_Detenciones %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
df_Detenciones$indicador_completo <- str_trim(df_Detenciones$indicador_completo)
head(df_Detenciones)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio barrio
## 1 223 2019 Ciudad de Madrid NA NA
## 2 224 2019 Ciudad de Madrid NA NA
## 3 225 2019 Ciudad de Madrid NA NA
## 4 226 2019 Ciudad de Madrid NA NA
## 5 227 2019 Ciudad de Madrid NA NA
## 6 228 2019 Ciudad de Madrid NA NA
## año fecha_indicador fuente_indicador
## 1 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 2 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 3 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 4 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 5 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 6 2019 2019 Portal de datos abiertos del Ayuntamiento de Madrid
## categoría_1 categoría_2
## 1 Seguridad Población detenidos e investigados por la Policía Municipal
## 2 Seguridad Población detenida e investigada por la Policía Municipal
## 3 Seguridad Población detenidos e investigados por la Policía Municipal
## 4 Seguridad Población detenida e investigada por la Policía Municipal
## 5 Seguridad Población detenida e investigada por la Policía Municipal
## 6 Seguridad Población detenida e investigada por la Policía Municipal
## indicador_nivel1 indicador_nivel2 indicador_nivel3
## 1 Número de personas detenidas
## 2 Número de personas detenidas Lesiones
## 3 Número de personas detenidas Violencia doméstica y de género
## 4 Número de personas detenidas Malos tratos a menores
## 5 Número de personas detenidas Abusos y agresiones sexuales
## 6 Número de personas detenidas Hurtos
## unidad_indicador
## 1 Personas detenidas
## 2 Personas detenidas
## 3 Personas detenidas
## 4 Personas detenidas
## 5 Personas detenidas
## 6 Personas detenidas
## indicador_completo
## 1 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Total personas detenidas e investigadas
## 2 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Lesiones
## 3 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Violencia doméstica y de género
## 4 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Malos tratos a menores
## 5 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Abusos y agresiones sexuales
## 6 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Hurtos
## valor_indicador
## 1 9.265
## 2 433.000
## 3 773.000
## 4 103.000
## 5 49.000
## 6 1.193
# subconjunto Detenciones Totales en Madrid
df_Detencioness <- df_Detenciones %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_nivel2,indicador_completo, valor_indicador)
head(df_Detencioness)
## ciudad indicador_nivel2
## 1 Ciudad de Madrid
## 2 Ciudad de Madrid Lesiones
## 3 Ciudad de Madrid Violencia doméstica y de género
## 4 Ciudad de Madrid Malos tratos a menores
## 5 Ciudad de Madrid Abusos y agresiones sexuales
## 6 Ciudad de Madrid Hurtos
## indicador_completo
## 1 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Total personas detenidas e investigadas
## 2 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Lesiones
## 3 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Violencia doméstica y de género
## 4 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Malos tratos a menores
## 5 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Abusos y agresiones sexuales
## 6 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Hurtos
## valor_indicador
## 1 9.265
## 2 433.000
## 3 773.000
## 4 103.000
## 5 49.000
## 6 1.193
# subconjunto Total Detenciones en los Distritos de Madrid
df_DetencionesTotalesDist <- df_Detenciones %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, valor_indicador) %>%
group_by(distrito)
name_cols <- c("Cod_Distrito", "Distrito", 'Valor_Detenciones')
colnames(df_DetencionesTotalesDist) <- name_cols
write.csv2(df_DetencionesTotalesDist, file = 'dataset/df_detencionesTotales_dist.csv')
df8_Dist <- df_DetencionesTotalesDist
head(df8_Dist)
## # A tibble: 6 × 3
## # Groups: Distrito [6]
## Cod_Distrito Distrito Valor_Detenciones
## <int> <chr> <dbl>
## 1 1 Centro 1.85
## 2 2 Arganzuela 291
## 3 3 Retiro 177
## 4 4 Salamanca 693
## 5 5 Chamartín 314
## 6 6 Tetuán 502
# subconjunto datos calidad de vida en los distritos
df_CalidadVida <- df_indPob %>%
filter(año == '2019') %>%
filter(fuente_indicador =='Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019') %>%
filter(str_detect(indicador_completo, 'Calidad de vida actual en su barrio '))
df_CalidadVida <- df_CalidadVida %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
df_CalidadVida$indicador_completo <- str_trim(df_CalidadVida$indicador_completo)
head(df_CalidadVida)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio
## 1 128 2019 Ciudad de Madrid NA NA
## 2 402 2019 Ciudad de Madrid 1 Centro NA
## 3 1348 2019 Ciudad de Madrid 2 Arganzuela NA
## 4 2414 2019 Ciudad de Madrid 3 Retiro NA
## 5 3360 2019 Ciudad de Madrid 4 Salamanca NA
## 6 4306 2019 Ciudad de Madrid 5 Chamartín NA
## barrio año fecha_indicador
## 1 2019 2019
## 2 2019 2019
## 3 2019 2019
## 4 2019 2019
## 5 2019 2019
## 6 2019 2019
## fuente_indicador
## 1 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 2 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 3 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 4 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 5 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 6 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## categoría_1 categoría_2 indicador_nivel1
## 1 Calidad de vida Calidad de vida y agenda pública Número de personas
## 2 Calidad de vida Calidad de vida y agenda pública Número de personas
## 3 Calidad de vida Calidad de vida y agenda pública Número de personas
## 4 Calidad de vida Calidad de vida y agenda pública Número de personas
## 5 Calidad de vida Calidad de vida y agenda pública Número de personas
## 6 Calidad de vida Calidad de vida y agenda pública Número de personas
## indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Vivir en el barrio Porcentaje
## 2 Vivir en el barrio Porcentaje
## 3 Vivir en el barrio Porcentaje
## 4 Vivir en el barrio Porcentaje
## 5 Vivir en el barrio Porcentaje
## 6 Vivir en el barrio Porcentaje
## indicador_completo valor_indicador
## 1 Calidad de vida actual en su barrio 71.3
## 2 Calidad de vida actual en su barrio 73.6
## 3 Calidad de vida actual en su barrio 77.9
## 4 Calidad de vida actual en su barrio 80.3
## 5 Calidad de vida actual en su barrio 77.5
## 6 Calidad de vida actual en su barrio 80.5
# subconjunto calidad de vida Total en Madrid
df_CalidadesVida <- df_CalidadVida %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador)
head(df_CalidadesVida)
## ciudad indicador_completo valor_indicador
## 1 Ciudad de Madrid Calidad de vida actual en su barrio 71.3
# subconjunto Calidad de Vida en los Distritos de Madrid
df_CalidadVidaDist <- df_CalidadVida %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
group_by(distrito)
name_cols <- c("Cod_Distrito", "Distrito", "Calidad_Vida", 'Valor_calidadVida')
colnames(df_CalidadVidaDist) <- name_cols
write.csv2(df_CalidadVidaDist, file = 'dataset/df_calidad_vida_dist.csv')
df9_Dist <- df_CalidadVidaDist
head(df9_Dist)
## # A tibble: 6 × 4
## # Groups: Distrito [6]
## Cod_Distrito Distrito Calidad_Vida Valor_calidadVida
## <int> <chr> <chr> <dbl>
## 1 1 Centro Calidad de vida actual en su barrio 73.6
## 2 2 Arganzuela Calidad de vida actual en su barrio 77.9
## 3 3 Retiro Calidad de vida actual en su barrio 80.3
## 4 4 Salamanca Calidad de vida actual en su barrio 77.5
## 5 5 Chamartín Calidad de vida actual en su barrio 80.5
## 6 6 Tetuán Calidad de vida actual en su barrio 67.1
# subconjunto datos percepción de seguridad en la noche en los distritos
df_PercepcionSeguridad <- df_indPob %>%
filter(año == '2019') %>%
filter(indicador_nivel2 =='Percepción seguridad') %>%
filter(str_detect(indicador_completo, 'Percepción de seguridad en el barrio por la noche'))
df_PercepcionSeguridad <- df_PercepcionSeguridad %>%
mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
df_PercepcionSeguridad$indicador_completo <- str_trim(df_PercepcionSeguridad$indicador_completo)
head(df_PercepcionSeguridad)
## Orden Periodo.panel ciudad cod_distrito distrito cod_barrio
## 1 20941 2020-21 Ciudad de Madrid NA NA
## 2 21204 2020-21 Ciudad de Madrid 1 Centro NA
## 3 21970 2020-21 Ciudad de Madrid 2 Arganzuela NA
## 4 22801 2020-21 Ciudad de Madrid 3 Retiro NA
## 5 23544 2020-21 Ciudad de Madrid 4 Salamanca NA
## 6 24272 2020-21 Ciudad de Madrid 5 Chamartín NA
## barrio año fecha_indicador
## 1 2019 2019
## 2 2019 2019
## 3 2019 2019
## 4 2019 2019
## 5 2019 2019
## 6 2019 2019
## fuente_indicador
## 1 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 2 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 3 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 4 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 5 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 6 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## categoría_1 categoría_2 indicador_nivel1
## 1 Calidad de vida Percepción de la seguridad Número de personas
## 2 Calidad de vida Percepción de la seguridad Número de personas
## 3 Calidad de vida Percepción de la seguridad Número de personas
## 4 Calidad de vida Percepción de la seguridad Número de personas
## 5 Calidad de vida Percepción de la seguridad Número de personas
## 6 Calidad de vida Percepción de la seguridad Número de personas
## indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Percepción seguridad Porcentaje
## 2 Percepción seguridad Porcentaje
## 3 Percepción seguridad Porcentaje
## 4 Percepción seguridad Porcentaje
## 5 Percepción seguridad Porcentaje
## 6 Percepción seguridad Porcentaje
## indicador_completo valor_indicador
## 1 Percepción de seguridad en el barrio por la noche 60.2
## 2 Percepción de seguridad en el barrio por la noche 69.8
## 3 Percepción de seguridad en el barrio por la noche 68.6
## 4 Percepción de seguridad en el barrio por la noche 66.6
## 5 Percepción de seguridad en el barrio por la noche 73.0
## 6 Percepción de seguridad en el barrio por la noche 73.0
# subconjunto calidad de vida Total en Madrid
df_PercepcionesSeguridad <- df_PercepcionSeguridad %>%
filter(is.na(cod_distrito)) %>%
select(ciudad, indicador_completo, valor_indicador)
head(df_PercepcionesSeguridad)
## ciudad indicador_completo
## 1 Ciudad de Madrid Percepción de seguridad en el barrio por la noche
## valor_indicador
## 1 60.2
# subconjunto Calidad de Vida en los Distritos de Madrid
df_PercepcionSeguridadDist <- df_PercepcionSeguridad %>%
filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
group_by(distrito)
name_cols <- c("Cod_Distrito", "Distrito", "Percepcion_Seguridad", 'Valor_PercepcionSeguridad')
colnames(df_PercepcionSeguridadDist) <- name_cols
write.csv2(df_PercepcionSeguridadDist, file = 'dataset/df_percepcion_seguridad_noche_dist.csv')
df10_Dist <- df_PercepcionSeguridadDist
head(df10_Dist)
## # A tibble: 6 × 4
## # Groups: Distrito [6]
## Cod_Distrito Distrito Percepcion_Seguridad Valor…¹
## <int> <chr> <chr> <dbl>
## 1 1 Centro Percepción de seguridad en el barrio por la n… 69.8
## 2 2 Arganzuela Percepción de seguridad en el barrio por la n… 68.6
## 3 3 Retiro Percepción de seguridad en el barrio por la n… 66.6
## 4 4 Salamanca Percepción de seguridad en el barrio por la n… 73
## 5 5 Chamartín Percepción de seguridad en el barrio por la n… 73
## 6 6 Tetuán Percepción de seguridad en el barrio por la n… 60.4
## # … with abbreviated variable name ¹Valor_PercepcionSeguridad
# Carga y procesado de los datos de AIRBNB en Madrid
df_airbnb <- read.csv("DataSet/airbnb_listings.csv", sep = ";", dec = ".")
str(df_airbnb)
## 'data.frame': 24828 obs. of 20 variables:
## $ id : chr "4879291" "18071804" "24508884" "34702469" ...
## $ name : chr "Rental unit in Madrid _*4.83 _1 bedroom _1 bed _1.5 baths" "Rental unit in Madrid _*5.0 _2 bedrooms _2 beds _1 bath" "Rental unit in Madrid _*4.86 _1 bedroom _1 bed _1.5 baths" "Home in Madrid _1 bedroom _1 bed _1 shared bath" ...
## $ host_id : int 5704937 4977064 185146981 177027976 262172537 279178673 300543178 301468492 86526540 253872613 ...
## $ host_name : chr "Bea" "Alberto" "Jose" "Valentina" ...
## $ cod_distrito : int 11 11 11 11 11 11 11 11 11 11 ...
## $ distrito : chr "Carabanchel" "Carabanchel" "Carabanchel" "Carabanchel" ...
## $ cod_barrio : logi NA NA NA NA NA NA ...
## $ barrio : chr "Abrantes" "Abrantes" "Abrantes" "Abrantes" ...
## $ latitude : chr "4037538" "4038263" "4038478" "4037947" ...
## $ longitude : chr "-373353" "-372689" "-372277" "-372895" ...
## $ room_type : chr "Entire home/apt" "Entire home/apt" "Private room" "Private room" ...
## $ price : int 60 18 20 100 820 60 75 24 21 107 ...
## $ minimum_nights : int 7 1 3 1 3 2 7 3 9 2 ...
## $ number_of_reviews : int 30 10 43 0 0 1 0 36 16 10 ...
## $ last_review : chr "09/06/2019" "12/02/2018" "29/11/2022" "" ...
## $ reviews_per_month : int 28 13 66 NA NA 2 NA 76 35 54 ...
## $ calculated_host_listings_count: int 1 1 1 1 1 1 1 1 1 1 ...
## $ availability_365 : int 265 0 39 0 0 0 0 67 189 0 ...
## $ number_of_reviews_ltm : int 0 0 4 0 0 0 0 13 4 3 ...
## $ license : chr "" "" "" "" ...
# número de alquileres vacacionales disponibles por distrito
df_airbnb_Dist <- df_airbnb %>%
select(cod_distrito, distrito, host_id) %>%
group_by(cod_distrito, distrito) %>%
summarize(numero_alquileres = n(), .groups = "drop")
name_cols <- c("Cod_Distrito", "Distrito", 'Alquileres')
colnames(df_airbnb_Dist) <- name_cols
write.csv2(df_airbnb_Dist, file = 'dataset/df_airbnb_dist.csv')
df_airbnb_Dist
## # A tibble: 21 × 3
## Cod_Distrito Distrito Alquileres
## <int> <chr> <int>
## 1 1 Centro 10607
## 2 2 Arganzuela 1247
## 3 3 Retiro 864
## 4 4 Salamanca 1708
## 5 5 Chamartín 730
## 6 6 Tetuán 1326
## 7 7 Chamberí 1645
## 8 8 Fuencarral-El Pardo 355
## 9 9 Moncloa-Aravaca 684
## 10 10 Latina 720
## # … with 11 more rows
# número de alquileres vacacionales disponibles por distrito
# agrupar por distritos, contar y ordenar
df_airbnb_counts_dist <- df_airbnb %>%
group_by(distrito) %>%
tally(sort = FALSE) %>%
mutate(percent = round(100* n / sum(n),2))
write.csv2(df_airbnb_counts_dist, file = 'dataset/df_airbnb_counts_dist.csv')
df_airbnb_counts_dist
## # A tibble: 21 × 3
## distrito n percent
## <chr> <int> <dbl>
## 1 Arganzuela 1247 5.02
## 2 Barajas 176 0.71
## 3 Carabanchel 889 3.58
## 4 Centro 10607 42.7
## 5 Chamartín 730 2.94
## 6 Chamberí 1645 6.63
## 7 Ciudad Lineal 818 3.29
## 8 Fuencarral-El Pardo 355 1.43
## 9 Hortaleza 529 2.13
## 10 Latina 720 2.9
## # … with 11 more rows
# número de alquileres vacacionales disponibles por Barrio
# agrupar por Barrios, contar y ordenar
df_airbnb_counts_barr <- df_airbnb %>%
group_by(barrio) %>%
tally(sort = TRUE) %>%
mutate(percent = round(100* n / sum(n),2))
write.csv2(df_airbnb_counts_barr, file = 'dataset/df_airbnb_barr.csv')
df_airbnb_counts_barr
## # A tibble: 126 × 3
## barrio n percent
## <chr> <int> <dbl>
## 1 Embajadores 2940 11.8
## 2 Universidad 2277 9.17
## 3 Palacio 1813 7.3
## 4 Sol 1287 5.18
## 5 Justicia 1249 5.03
## 6 Cortes 1041 4.19
## 7 Trafalgar 527 2.12
## 8 Palos de la Frontera 406 1.64
## 9 Goya 405 1.63
## 10 Guindalera 393 1.58
## # … with 116 more rows
# generación del conjunto de datos a partir de los subconjuntos obtenidos
rm(df_aux)
## Warning in rm(df_aux): objeto 'df_aux' no encontrado
df_aux <- merge(df3_Dist, df4_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df5_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df8_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df9_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df10_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
columnas_a_quitar <-c ('Renta_Media', 'Edad_Media', 'Densidad_Poblacion', 'Calidad_Vida', 'Percepcion_Seguridad')
df_aux <- df_aux %>%
select(-one_of(columnas_a_quitar))
head(df_aux)
## Cod_Distrito Distrito Valor_Renta Valor_Edad Valor_DensidadPob
## 1 1 Centro 36.072 44.09 269
## 2 10 Latina 31.872 46.55 95
## 3 11 Carabanchel 29.842 43.53 185
## 4 12 Usera 27.674 42.34 184
## 5 13 Puente de Vallecas 26.652 43.30 161
## 6 14 Moratalaz 36.755 47.61 157
## Valor_Detenciones Valor_calidadVida Valor_PercepcionSeguridad
## 1 1.852 73.6 69.8
## 2 350.000 68.6 54.4
## 3 630.000 66.2 49.1
## 4 362.000 61.8 44.9
## 5 1.109 60.0 46.8
## 6 125.000 76.4 61.0
# incorporar el resto de subconjuntos
# tasas de desempleo. Subdividido en Hombres/Mujeres y Tramos de Edad
df_pivoted <- df2_Dist %>%
group_by(Cod_Distrito, Distrito, Tasa_Desempleo) %>%
summarise(valor_medio = round(mean(Valor_Tasa, na.rm = TRUE), digits = 2)) %>%
pivot_wider(names_from = Tasa_Desempleo, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# intervenciones de la policía local por tipología de intervención
df_pivoted <- df6_Dist %>%
group_by(Cod_Distrito, Distrito, Tipo_Intervencion) %>%
summarise(valor_medio = round(mean(Valor_Intevencion, na.rm = TRUE), digits = 2)) %>%
pivot_wider(names_from = Tipo_Intervencion, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# valores catastrales. Subdividido en tipo de persona
df_pivoted <- df7_Dist %>%
group_by(Cod_Distrito, Distrito, Tipo_Catastro) %>%
summarise(valor_medio = round(mean(Valor_catastro, na.rm = TRUE), digits = 2)) %>%
pivot_wider(names_from = Tipo_Catastro, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# estado de las viviendas.
df_pivoted <- df1_Dist %>%
group_by(Cod_Distrito, Distrito, Estado_Vivienda) %>%
summarise(valor_medio = round(mean(Valor_Estado, na.rm = TRUE), digits = 2)) %>%
pivot_wider(names_from = Estado_Vivienda, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# incroporar los datos de airbnb
df_aux <- merge(df_aux, df_airbnb_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# se carga la variable Target.
# 0 si el distrito pierde habitantes, 1 si no pierde habitantes
df_Target <- read.csv2('df/df_target.csv')
#se añade al dataframe
df_aux <- merge(df_aux, df_Target, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# se renombran las columnas
columnas <- c('Cod_Distrito', 'Distrito', 'Renta_Media', 'Edad_Media', 'Densidad_Pob', 'Num_Detenciones', 'Calidad_Vida', 'Percepcion_seguridad', 'Tasa_Desem_H_16_24', 'Tasa_Desem_H_25_44', 'Tasa_Desem_H_45_64', 'Tasa_Desem_M_16_24', 'Tasa_Desem_M_25_44', 'Tasa_Desem_M_45_64', 'Num_Delitos_Perso', 'Num_Delitos_Pat', 'Num_Delitos_Armas', 'Num_Delitos_Drogas', 'Valor_Cat_Fisicas', 'Valor_Cat_Juridicas', 'Vivienda_NoConsta', 'Vivienda_Bueno', 'Vivienda_Deficiente', 'Vivienda_Malo', 'Vivienda_Ruina', 'Num_Alquileres_Airbnb', 'Target')
colnames(df_aux) <- columnas
write.csv2(df_aux, file = 'df/dataset.csv')
head(df_aux)
## Cod_Distrito Distrito Renta_Media Edad_Media Densidad_Pob
## 1 1 Centro 36.072 44.09 269
## 2 10 Latina 31.872 46.55 95
## 3 11 Carabanchel 29.842 43.53 185
## 4 12 Usera 27.674 42.34 184
## 5 13 Puente de Vallecas 26.652 43.30 161
## 6 14 Moratalaz 36.755 47.61 157
## Num_Detenciones Calidad_Vida Percepcion_seguridad Tasa_Desem_H_16_24
## 1 1.852 73.6 69.8 3.68
## 2 350.000 68.6 54.4 5.61
## 3 630.000 66.2 49.1 6.40
## 4 362.000 61.8 44.9 7.03
## 5 1.109 60.0 46.8 7.80
## 6 125.000 76.4 61.0 5.18
## Tasa_Desem_H_25_44 Tasa_Desem_H_45_64 Tasa_Desem_M_16_24 Tasa_Desem_M_25_44
## 1 6.00 11.11 3.22 6.81
## 2 7.98 10.59 5.39 9.74
## 3 8.49 11.09 6.41 10.70
## 4 9.04 11.44 7.88 11.74
## 5 9.88 13.03 7.74 12.91
## 6 7.88 9.67 5.33 9.97
## Tasa_Desem_M_45_64 Num_Delitos_Perso Num_Delitos_Pat Num_Delitos_Armas
## 1 10.83 943 1439 716
## 2 11.64 157 185 29
## 3 12.38 376 296 49
## 4 13.12 272 310 25
## 5 13.52 359 389 142
## 6 11.08 67 101 21
## Num_Delitos_Drogas Valor_Cat_Fisicas Valor_Cat_Juridicas Vivienda_NoConsta
## 1 2155 117.0 593 1875
## 2 214 61.5 232 1735
## 3 345 52.8 142 4135
## 4 335 50.5 169 1255
## 5 531 43.7 99 2285
## 6 122 82.5 248 140
## Vivienda_Bueno Vivienda_Deficiente Vivienda_Malo Vivienda_Ruina
## 1 74970 7895 1725.0 330
## 2 107455 5245 810.0 250
## 3 103880 6090 1035.0 125
## 4 54565 2715 370.0 380
## 5 92170 9785 1880.0 470
## 6 43755 415 635.5 95
## Num_Alquileres_Airbnb Target
## 1 10607 0
## 2 720 1
## 3 889 1
## 4 606 0
## 5 719 1
## 6 186 1
# carga del conjunto de datos
df <- read.csv2('df/dataset.csv')
str(df)
## 'data.frame': 21 obs. of 28 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Cod_Distrito : int 1 10 11 12 13 14 15 16 17 18 ...
## $ Distrito : chr "Centro" "Latina" "Carabanchel" "Usera" ...
## $ Renta_Media : num 36.1 31.9 29.8 27.7 26.7 ...
## $ Edad_Media : num 44.1 46.5 43.5 42.3 43.3 ...
## $ Densidad_Pob : num 269 95 185 184 161 ...
## $ Num_Detenciones : num 1.85 350 630 362 1.11 ...
## $ Calidad_Vida : num 73.6 68.6 66.2 61.8 60 76.4 69.5 75.7 56.3 69 ...
## $ Percepcion_seguridad : num 69.8 54.4 49.1 44.9 46.8 61 56.1 60.9 41.6 52.5 ...
## $ Tasa_Desem_H_16_24 : num 3.68 5.61 6.4 7.03 7.8 5.18 3.79 3.43 7.69 7.69 ...
## $ Tasa_Desem_H_25_44 : num 6 7.98 8.49 9.04 9.88 7.88 6.36 5.13 9.46 7.21 ...
## $ Tasa_Desem_H_45_64 : num 11.1 10.6 11.1 11.4 13 ...
## $ Tasa_Desem_M_16_24 : num 3.22 5.39 6.41 7.88 7.74 5.33 3.63 2.85 7.77 8.31 ...
## $ Tasa_Desem_M_25_44 : num 6.81 9.74 10.7 11.74 12.91 ...
## $ Tasa_Desem_M_45_64 : num 10.8 11.6 12.4 13.1 13.5 ...
## $ Num_Delitos_Perso : int 943 157 376 272 359 67 344 97 216 159 ...
## $ Num_Delitos_Pat : int 1439 185 296 310 389 101 374 103 259 351 ...
## $ Num_Delitos_Armas : int 716 29 49 25 142 21 49 26 27 39 ...
## $ Num_Delitos_Drogas : int 2155 214 345 335 531 122 423 129 286 390 ...
## $ Valor_Cat_Fisicas : num 117 61.5 52.8 50.5 43.7 82.5 83.8 108 52.8 62 ...
## $ Valor_Cat_Juridicas : int 593 232 142 169 99 248 292 281 142 139 ...
## $ Vivienda_NoConsta : int 1875 1735 4135 1255 2285 140 1230 2170 1535 800 ...
## $ Vivienda_Bueno : int 74970 107455 103880 54565 92170 43755 97780 70310 55445 41730 ...
## $ Vivienda_Deficiente : int 7895 5245 6090 2715 9785 415 2385 1600 3655 775 ...
## $ Vivienda_Malo : num 1725 810 1035 370 1880 ...
## $ Vivienda_Ruina : num 330 250 125 380 470 95 85 120 140 40 ...
## $ Num_Alquileres_Airbnb: int 10607 720 889 606 719 186 818 529 252 120 ...
## $ Target : int 0 1 1 0 1 1 1 1 1 1 ...
# se excluyen las columnas no necesarias
df_clust <- df[-c(1:3)]
#df_clust <- df_clust[-df_clust$Target]
df_clust
## Renta_Media Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida
## 1 36.072 44.09 269.00 1.852 73.6
## 2 31.872 46.55 95.00 350.000 68.6
## 3 29.842 43.53 185.00 630.000 66.2
## 4 27.674 42.34 184.00 362.000 61.8
## 5 26.652 43.30 161.00 1.109 60.0
## 6 36.755 47.61 157.00 125.000 76.4
## 7 39.425 45.87 192.00 509.000 69.5
## 8 52.944 42.35 70.48 221.000 75.7
## 9 28.407 42.15 76.44 411.000 56.3
## 10 32.765 38.90 22.25 333.000 69.0
## 11 33.870 40.83 21.00 78.000 72.1
## 12 43.789 44.63 241.00 291.000 77.9
## 13 37.112 43.22 72.32 396.000 70.3
## 14 49.615 41.79 11.93 97.000 80.9
## 15 55.775 47.13 220.00 177.000 80.3
## 16 61.466 46.34 274.00 693.000 77.5
## 17 70.735 45.48 161.00 314.000 80.5
## 18 37.557 44.23 300.00 502.000 67.1
## 19 54.327 46.43 301.00 251.000 80.0
## 20 52.858 42.94 10.51 220.000 75.8
## 21 64.066 44.63 26.15 264.000 79.5
## Percepcion_seguridad Tasa_Desem_H_16_24 Tasa_Desem_H_25_44
## 1 69.8 3.68 6.00
## 2 54.4 5.61 7.98
## 3 49.1 6.40 8.49
## 4 44.9 7.03 9.04
## 5 46.8 7.80 9.88
## 6 61.0 5.18 7.88
## 7 56.1 3.79 6.36
## 8 60.9 3.43 5.13
## 9 41.6 7.69 9.46
## 10 52.5 7.69 7.21
## 11 59.8 6.20 8.20
## 12 68.6 3.53 5.65
## 13 66.0 4.76 7.21
## 14 67.6 3.23 4.95
## 15 66.6 1.99 5.05
## 16 73.0 1.99 4.05
## 17 73.0 1.71 3.86
## 18 60.4 4.62 5.71
## 19 75.2 2.19 4.52
## 20 67.3 2.92 4.92
## 21 70.5 2.12 4.91
## Tasa_Desem_H_45_64 Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64
## 1 11.11 3.22 6.81 10.83
## 2 10.59 5.39 9.74 11.64
## 3 11.09 6.41 10.70 12.38
## 4 11.44 7.88 11.74 13.12
## 5 13.03 7.74 12.91 13.52
## 6 9.67 5.33 9.97 11.08
## 7 9.88 3.63 7.84 10.54
## 8 7.64 2.85 7.00 9.79
## 9 11.53 7.77 13.38 14.09
## 10 9.75 8.31 10.66 12.95
## 11 8.48 6.60 11.12 11.37
## 12 7.91 3.31 6.82 8.78
## 13 9.48 4.59 9.40 11.33
## 14 6.88 2.92 6.92 8.55
## 15 6.73 2.13 5.79 7.73
## 16 6.73 1.62 4.84 7.85
## 17 7.02 1.60 4.76 7.85
## 18 10.60 4.41 7.33 10.75
## 19 6.98 2.25 5.15 7.91
## 20 7.03 2.70 6.45 8.64
## 21 6.98 1.94 5.99 7.55
## Num_Delitos_Perso Num_Delitos_Pat Num_Delitos_Armas Num_Delitos_Drogas
## 1 943 1439 716 2155
## 2 157 185 29 214
## 3 376 296 49 345
## 4 272 310 25 335
## 5 359 389 142 531
## 6 67 101 21 122
## 7 344 374 49 423
## 8 97 103 26 129
## 9 216 259 27 286
## 10 159 351 39 390
## 11 66 51 10 61
## 12 199 287 19 306
## 13 223 288 30 318
## 14 70 186 4 190
## 15 70 86 20 106
## 16 113 438 18 456
## 17 100 154 15 169
## 18 344 228 30 258
## 19 144 158 7 165
## 20 130 110 22 132
## 21 174 276 20 296
## Valor_Cat_Fisicas Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno
## 1 117.0 593 1875 74970
## 2 61.5 232 1735 107455
## 3 52.8 142 4135 103880
## 4 50.5 169 1255 54565
## 5 43.7 99 2285 92170
## 6 82.5 248 140 43755
## 7 83.8 292 1230 97780
## 8 108.0 281 2170 70310
## 9 52.8 142 1535 55445
## 10 62.0 139 800 41730
## 11 61.1 200 2005 27550
## 12 84.1 297 1320 65310
## 13 71.3 316 890 63645
## 14 92.0 979 595 19410
## 15 132.0 483 900 54950
## 16 160.0 549 1035 80955
## 17 150.0 483 460 69735
## 18 89.2 271 580 72245
## 19 133.0 483 365 76720
## 20 94.0 508 1680 95455
## 21 143.0 629 780 52235
## Vivienda_Deficiente Vivienda_Malo Vivienda_Ruina Num_Alquileres_Airbnb
## 1 7895 1725.0 330.00 10607
## 2 5245 810.0 250.00 720
## 3 6090 1035.0 125.00 889
## 4 2715 370.0 380.00 606
## 5 9785 1880.0 470.00 719
## 6 415 635.5 95.00 186
## 7 2385 260.0 85.00 818
## 8 1600 735.0 120.00 529
## 9 3655 1145.0 140.00 252
## 10 775 175.0 40.00 120
## 11 675 75.0 171.25 79
## 12 7200 1885.0 540.00 1247
## 13 2750 45.0 120.00 568
## 14 275 50.0 40.00 176
## 15 445 255.0 45.00 864
## 16 1255 265.0 70.00 1708
## 17 1635 175.0 120.00 730
## 18 5940 1130.0 270.00 1326
## 19 2290 370.0 35.00 1645
## 20 1890 110.0 125.00 355
## 21 1865 215.0 25.00 684
## Target
## 1 0
## 2 1
## 3 1
## 4 0
## 5 1
## 6 1
## 7 1
## 8 1
## 9 1
## 10 1
## 11 1
## 12 0
## 13 0
## 14 0
## 15 0
## 16 0
## 17 0
## 18 0
## 19 0
## 20 0
## 21 0
# posibles valores anómalos
for(i in 1:24){
boxplot(df_clust[,i] ~ df_clust$Target, main =colnames(df_clust)[i], xlab = "Target",
ylab = colnames(df_clust)[i], col="lightblue")
}
# Normalización de las variables
# Función de Normalización
fun_normalize <- function(x, na.rm = TRUE) {
return((x- min(x)) /(max(x)-min(x)))
}
df_clust_Normalized <- as.data.frame(apply(df_clust,MARGIN = 2, FUN = fun_normalize))
summary(df_clust_Normalized)
## Renta_Media Edad_Media Densidad_Pob Num_Detenciones
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.1387 1st Qu.:0.3961 1st Qu.:0.2064 1st Qu.:0.2542
## Median :0.2474 Median :0.5959 Median :0.5181 Median :0.4190
## Mean :0.3715 Mean :0.5874 Mean :0.4640 Mean :0.4270
## 3rd Qu.:0.5964 3rd Qu.:0.8002 3rd Qu.:0.7212 3rd Qu.:0.5707
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Calidad_Vida Percepcion_seguridad Tasa_Desem_H_16_24 Tasa_Desem_H_25_44
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.5000 1st Qu.:0.3810 1st Qu.:0.1987 1st Qu.:0.1811
## Median :0.7033 Median :0.5774 Median :0.3415 Median :0.3555
## Mean :0.6518 Mean :0.5832 Mean :0.4508 Mean :0.4382
## 3rd Qu.:0.8780 3rd Qu.:0.8036 3rd Qu.:0.7373 3rd Qu.:0.6844
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Tasa_Desem_H_45_64 Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64
## Min. :0.00000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.04603 1st Qu.:0.1639 1st Qu.:0.1961 1st Qu.:0.1529
## Median :0.43651 Median :0.3025 Median :0.2981 Median :0.4893
## Mean :0.37203 Mean :0.4187 Mean :0.4163 Mean :0.4347
## 3rd Qu.:0.61429 3rd Qu.:0.7168 3rd Qu.:0.6845 3rd Qu.:0.6254
## Max. :1.00000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Num_Delitos_Perso Num_Delitos_Pat Num_Delitos_Armas Num_Delitos_Drogas
## Min. :0.00000 Min. :0.00000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0.03877 1st Qu.:0.07421 1st Qu.:0.02107 1st Qu.:0.04967
## Median :0.10604 Median :0.14986 Median :0.02949 Median :0.10745
## Mean :0.17576 Mean :0.17147 Mean :0.08253 Mean :0.13885
## 3rd Qu.:0.23489 3rd Qu.:0.18660 3rd Qu.:0.03652 3rd Qu.:0.13563
## Max. :1.00000 Max. :1.00000 Max. :1.00000 Max. :1.00000
## Valor_Cat_Fisicas Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.1531 1st Qu.:0.1148 1st Qu.:0.1602 1st Qu.:0.3993
## Median :0.3474 Median :0.2193 Median :0.2728 Median :0.5716
## Mean :0.4122 Mean :0.2952 Mean :0.2960 Mean :0.5477
## 3rd Qu.:0.6303 3rd Qu.:0.4364 3rd Qu.:0.3992 3rd Qu.:0.6990
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Vivienda_Deficiente Vivienda_Malo Vivienda_Ruina Num_Alquileres_Airbnb
## Min. :0.0000 Min. :0.00000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0.1030 1st Qu.:0.07065 1st Qu.:0.08738 1st Qu.:0.02622
## Median :0.2119 Median :0.17663 Median :0.18447 Median :0.06079
## Mean :0.3055 Mean :0.32092 Mean :0.28398 Mean :0.10480
## 3rd Qu.:0.5226 3rd Qu.:0.53804 3rd Qu.:0.43689 3rd Qu.:0.07694
## Max. :1.0000 Max. :1.00000 Max. :1.00000 Max. :1.00000
## Target
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.4286
## 3rd Qu.:1.0000
## Max. :1.0000
# correlación de las variables
x <- df_clust_Normalized[-df_clust_Normalized$Target]
corr_map <- ggcorr(x, method=c("everything", "pearson"), nbreaks = 4, label=TRUE, label_size = 3, label_alpha = TRUE, hjust = .90, size = 2, layout.exp = 1)
corr_map
# Análisis de Componentes Principales (PCA)
df_pca <- df_clust_Normalized %>%
select(-Target)
# escalado
df_scaled <- scale(df_pca)
# algoritmo PCA
pca <- PCA(df_scaled, graph = FALSE)
summary(pca)
##
## Call:
## PCA(X = df_scaled, graph = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## Variance 10.910 6.136 2.405 1.314 1.063 0.627 0.373
## % of var. 45.459 25.567 10.022 5.477 4.428 2.612 1.553
## Cumulative % of var. 45.459 71.026 81.047 86.524 90.952 93.565 95.117
## Dim.8 Dim.9 Dim.10 Dim.11 Dim.12 Dim.13 Dim.14
## Variance 0.293 0.254 0.169 0.162 0.096 0.080 0.052
## % of var. 1.219 1.058 0.704 0.676 0.400 0.335 0.217
## Cumulative % of var. 96.336 97.394 98.098 98.774 99.174 99.509 99.725
## Dim.15 Dim.16 Dim.17 Dim.18 Dim.19 Dim.20
## Variance 0.028 0.020 0.010 0.005 0.004 0.000
## % of var. 0.116 0.083 0.041 0.020 0.015 0.001
## Cumulative % of var. 99.841 99.924 99.964 99.984 99.999 100.000
##
## Individuals (the 10 first)
## Dist Dim.1 ctr cos2 Dim.2 ctr cos2
## 1 | 10.272 | 1.525 1.015 0.022 | 9.746 73.719 0.900 |
## 2 | 3.373 | 2.215 2.141 0.431 | -0.442 0.151 0.017 |
## 3 | 5.506 | 4.048 7.152 0.540 | 0.084 0.006 0.000 |
## 4 | 4.846 | 4.239 7.844 0.765 | -1.226 1.167 0.064 |
## 5 | 7.025 | 6.408 17.921 0.832 | 1.164 1.051 0.027 |
## 6 | 3.456 | 0.004 0.000 0.000 | -1.586 1.951 0.211 |
## 7 | 2.555 | 0.119 0.006 0.002 | 0.278 0.060 0.012 |
## 8 | 2.744 | -1.418 0.878 0.267 | -0.911 0.644 0.110 |
## 9 | 5.665 | 5.045 11.110 0.793 | -1.867 2.704 0.109 |
## 10 | 4.815 | 2.554 2.846 0.281 | -2.501 4.855 0.270 |
## Dim.3 ctr cos2
## 1 -2.755 15.024 0.072 |
## 2 1.731 5.933 0.263 |
## 3 2.196 9.547 0.159 |
## 4 -0.240 0.114 0.002 |
## 5 0.655 0.850 0.009 |
## 6 -0.327 0.212 0.009 |
## 7 1.440 4.104 0.318 |
## 8 -0.089 0.016 0.001 |
## 9 -0.329 0.214 0.003 |
## 10 -2.402 11.421 0.249 |
##
## Variables (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3
## Renta_Media | -0.942 8.135 0.887 | 0.023 0.009 0.001 | 0.068
## Edad_Media | -0.430 1.694 0.185 | 0.277 1.253 0.077 | 0.589
## Densidad_Pob | -0.072 0.047 0.005 | 0.586 5.597 0.343 | 0.558
## Num_Detenciones | -0.006 0.000 0.000 | -0.175 0.499 0.031 | 0.629
## Calidad_Vida | -0.922 7.789 0.850 | 0.100 0.162 0.010 | -0.128
## Percepcion_seguridad | -0.890 7.257 0.792 | 0.314 1.611 0.099 | -0.068
## Tasa_Desem_H_16_24 | 0.943 8.151 0.889 | -0.265 1.144 0.070 | -0.127
## Tasa_Desem_H_25_44 | 0.935 8.008 0.874 | -0.209 0.715 0.044 | -0.038
## Tasa_Desem_H_45_64 | 0.942 8.126 0.887 | 0.188 0.576 0.035 | 0.076
## Tasa_Desem_M_16_24 | 0.915 7.665 0.836 | -0.312 1.584 0.097 | -0.143
## ctr cos2
## Renta_Media 0.193 0.005 |
## Edad_Media 14.446 0.347 |
## Densidad_Pob 12.968 0.312 |
## Num_Detenciones 16.429 0.395 |
## Calidad_Vida 0.684 0.016 |
## Percepcion_seguridad 0.192 0.005 |
## Tasa_Desem_H_16_24 0.666 0.016 |
## Tasa_Desem_H_25_44 0.059 0.001 |
## Tasa_Desem_H_45_64 0.243 0.006 |
## Tasa_Desem_M_16_24 0.855 0.021 |
# significado de cada variable
var <- get_pca_var(pca)
var
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
# Visualizar la varianza explicada por cada componente
fviz_eig(pca, addlabels = TRUE)
# Visualizar la contribución de las variables originales en los componentes principales
fviz_contrib(pca, choice = "var")
var <- get_pca_var(pca)
var
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
# Biplot para visualizar las observaciones y las variables en el espacio de los componentes principales
fviz_pca_biplot(pca, geom.ind = "point", col.ind = "blue2",
geom.var = "arrow", col.var = "red", alpha.var = 0.7)
# correlaciones despues de PCA
corrplot(var$cos2, is.corr=FALSE)
# Color by cos2 values: quality on the factor map
fviz_pca_var(pca, col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE
)
# Obtener los valores de los componentes principales para cada observación
df_pca_scores <- as.data.frame(pca$ind$coord)
# Agregar la variable de objetivo "Target" a los resultados del PCA
df_pca_scores$Target <- df_clust_Normalized$Target
head(df_pca_scores)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Target
## 1 1.525148205 9.74632614 -2.7546998 0.60412050 0.1687694 0
## 2 2.214563962 -0.44177627 1.7311050 -0.14158094 -0.4077584 1
## 3 4.047881152 0.08438634 2.1959345 1.99307260 -1.6927330 1
## 4 4.239270657 -1.22645171 -0.2404409 -0.01512372 1.2100450 0
## 5 6.407791626 1.16375314 0.6551358 -2.04319392 -0.8058294 1
## 6 0.003757407 -1.58570626 -0.3269971 -1.26365819 2.0807058 1
# Visualizar los resultados del PCA con la variable objetivo
ggplot(df_pca_scores, aes(Dim.1, Dim.2, color = Target)) +
geom_point() +
labs(title = "PCA",
x = "Componente Principal 1",
y = "Componente Principal 2")
# contribución de las variables a los componentes
corrplot(var$contrib, is.corr=FALSE)
# variables más relevantes (contribuyentes)
fviz_pca_var(pca, col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")
)
# determinación del número de clústeres.
fviz_nbclust(x, FUNcluster = kmeans, method = "silhouette", k.max = 10) +
labs(title = "Número óptimo de clusters")
# Elbow Method
fviz_nbclust(x, FUNcluster = kmeans, method = "wss", k.max = 10) +
labs(title = "Número óptimo de clusters")
# k-means 3 clusters
kmeans_clusters <- kmeans(x, centers = 3, iter.max = 100)
kmeans_clusters$centers
## Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## 1 0.6585821 0.4264303 0.4025432 0.9136179 0.8232887
## 2 0.6218905 0.8932838 0.3813342 0.6734417 0.7341270
## 3 0.5200918 0.3652139 0.4601908 0.4357724 0.3458333
## Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64 Tasa_Desem_M_16_24
## 1 0.1211002 0.1351744 0.04265873 0.09705663
## 2 0.3667214 0.3200443 0.49894180 0.30501739
## 3 0.7397373 0.7161130 0.59746032 0.71013413
## Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso Num_Delitos_Pat
## 1 0.1279002 0.1045489 0.0527366 0.09933357
## 2 0.2583140 0.3929664 0.4895477 0.43251681
## 3 0.6944316 0.7113150 0.1800456 0.15086455
## Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas Valor_Cat_Juridicas
## 1 0.01755618 0.06894699 0.7119518 0.5117898
## 2 0.35252809 0.40369309 0.4562912 0.3272727
## 3 0.05351124 0.11532951 0.1590714 0.1123864
## Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente Vivienda_Malo
## 1 0.2147997 0.5174769 0.1190195 0.1233016
## 2 0.2799332 0.5841520 0.7083771 0.8342391
## 3 0.3657071 0.5609347 0.3337539 0.3250272
## Vivienda_Ruina Num_Alquileres_Airbnb Target
## 1 0.09223301 0.07193911 0.125
## 2 0.68932039 0.40979610 0.000
## 3 0.31577670 0.03958017 0.800
# matriz de confusión
t <- table(kmeans_clusters$cluster, df_clust$Target)
t
##
## 0 1
## 1 7 1
## 2 3 0
## 3 2 8
fviz_cluster(object = kmeans_clusters, data = x, show.clust.cent = TRUE,
ellipse.type = "euclid", star.plot = TRUE, repel = FALSE) +
labs(title = "Resultados clustering K-means 3 Clústers") +
theme_bw() +
theme(legend.position = "none")
## Too few points to calculate an ellipse
# k-means 2 clusters
kmeans_clusters <- kmeans(x, centers = 2, iter.max = 100)
kmeans_clusters$centers
## Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## 1 0.5227708 0.3821512 0.4479074 0.4209575 0.3035714
## 2 0.6358592 0.5253394 0.4112575 0.8248645 0.7929067
## Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64 Tasa_Desem_M_16_24
## 1 0.7662835 0.7338501 0.6153439 0.7395264
## 2 0.2141489 0.2165006 0.1895503 0.1780924
## Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso Num_Delitos_Pat
## 1 0.7117814 0.7261298 0.1801596 0.1486551
## 2 0.1947022 0.2161060 0.1724629 0.1885807
## Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas Valor_Cat_Juridicas
## 1 0.0553995 0.1145071 0.1503774 0.09747475
## 2 0.1028792 0.1571156 0.6084838 0.44356061
## Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente Vivienda_Malo
## 1 0.3854819 0.5674371 0.3419208 0.3611413
## 2 0.2288277 0.5328904 0.2781283 0.2907609
## Vivienda_Ruina Num_Alquileres_Airbnb Target
## 1 0.3303668 0.03881712 0.88888889
## 2 0.2491909 0.15427907 0.08333333
# matriz de confusión
t <- table(kmeans_clusters$cluster, df_clust$Target)
t
##
## 0 1
## 1 1 8
## 2 11 1
fviz_cluster(object = kmeans_clusters, data = x, show.clust.cent = TRUE,
ellipse.type = "euclid", star.plot = TRUE, repel = FALSE) +
labs(title = "Resultados clustering K-means 2 Clústeres") +
theme_bw() +
theme(legend.position = "none")
# 2 clusters para los datos normalizados
km <- kmeans_clusters
par(mfrow=c(1,2))
#Sacamos las gráficas
for (i in 1:23){
for (j in (i+1):24){
plot(x[c(i,j)], col=km$cluster, main="Clasificación k-means")
legend("topright",
legend = levels(factor(km$cluster)),
pch = 10,cex = 0.9,
col = factor(levels(factor(km$cluster))))
plot(x[c(i,j)], col=as.factor(df_clust$Target), main="Clasificación real")
legend("topright",
legend = levels(factor(df_clust$Target)),
pch = 10,cex=0.9,
col = factor(levels(factor(df_clust$Target))))
}
}
x %>%
mutate(cluster = km$cluster) %>%
group_by(cluster) %>%
summarise_all("mean")
## # A tibble: 2 × 25
## cluster Edad_Media Densidad_…¹ Num_D…² Calid…³ Perce…⁴ Tasa_…⁵ Tasa_…⁶ Tasa_…⁷
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 0.523 0.382 0.448 0.421 0.304 0.766 0.734 0.615
## 2 2 0.636 0.525 0.411 0.825 0.793 0.214 0.217 0.190
## # … with 16 more variables: Tasa_Desem_M_16_24 <dbl>, Tasa_Desem_M_25_44 <dbl>,
## # Tasa_Desem_M_45_64 <dbl>, Num_Delitos_Perso <dbl>, Num_Delitos_Pat <dbl>,
## # Num_Delitos_Armas <dbl>, Num_Delitos_Drogas <dbl>, Valor_Cat_Fisicas <dbl>,
## # Valor_Cat_Juridicas <dbl>, Vivienda_NoConsta <dbl>, Vivienda_Bueno <dbl>,
## # Vivienda_Deficiente <dbl>, Vivienda_Malo <dbl>, Vivienda_Ruina <dbl>,
## # Num_Alquileres_Airbnb <dbl>, Target <dbl>, and abbreviated variable names
## # ¹Densidad_Pob, ²Num_Detenciones, ³Calidad_Vida, ⁴Percepcion_seguridad, …
# Número de distritos en el clúster 1
sum(km$cluster == 1)
## [1] 9
# Número de distritos en el clúster 2
sum(km$cluster == 2)
## [1] 12
# validación del agrupamiento
X <- df_pca_scores$Dim.1
Y <- df_pca_scores$Dim.2
df_XY <- as.data.frame(cbind(X,Y))
grupos <- as.factor(km$cluster)
x$gent <- as.factor(ifelse(x$Target==1,1,2))
# gráfica de las 2 componentes principales con k-means (k=2)
ggplot(df_XY,aes(X,Y,col=grupos)) + geom_point(size=4) + xlab('dimensión 1') + ylab('Dimensión 2') + ggtitle('Componentes principales Dim 1 y Dim 2 \n agrupadas con K-means (K=2)') + theme(text = element_text(size=12))
# gráfica de las observaciones en las 2 componentes principales con k-means (k=2) y con la variable Target
ggplot(df_XY,aes(X,Y,col=grupos, shape=x$gent)) + geom_point(size=4) + xlab('dimensión 1') + ylab('Dimensión 2') + ggtitle('Componentes principales Dim 1 y Dim 2 \n agrupadas con K-means (K=2) y la variable objetivo') + theme(text = element_text(size=12))
# K-medoids
pam_clusters <- pam(x, k = 3, metric = "manhattan")
#medoids obtenidos
pam_clusters$medoids
## Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## [1,] 0.6119403 0.99655754 0.7239450 0.4390244 0.5595238
## [2,] 0.8783008 0.29085339 0.5042572 0.5000000 0.3809524
## [3,] 0.6578645 0.05384006 0.3799601 0.9430894 0.8601190
## Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64
## [1,] 0.47783251 0.3073090 0.61428571
## [2,] 0.64039409 0.6843854 0.61269841
## [3,] 0.06732348 0.1744186 0.03968254
## Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso
## [1,] 0.41877794 0.2981439 0.4892966 0.3169897
## [2,] 0.56482861 0.5777262 0.6253823 0.1037628
## [3,] 0.05067064 0.1426914 0.0000000 0.1231471
## Num_Delitos_Pat Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas
## [1,] 0.12752161 0.03651685 0.09407832 0.3912296
## [2,] 0.09654179 0.03511236 0.07306590 0.1530525
## [3,] 0.16210375 0.02247191 0.11222541 0.8538263
## Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente
## [1,] 0.1954545 0.1101377 0.6000909 0.5956887
## [2,] 0.1511364 0.3992491 1.0000000 0.5226078
## [3,] 0.6022727 0.1602003 0.3728207 0.1671924
## Vivienda_Malo Vivienda_Ruina Num_Alquileres_Airbnb Target gent
## [1,] 0.5896739 0.4757282 0.11844605 0 2
## [2,] 0.4157609 0.4368932 0.06088526 1 1
## [3,] 0.0923913 0.0000000 0.05746581 0 2
# información de clústeres obtenidos
pam_clusters$clusinfo
## size max_diss av_diss diameter separation
## [1,] 5 7.834978 4.382126 12.145675 4.330653
## [2,] 9 6.537391 4.291483 10.220301 4.180328
## [3,] 7 3.424701 2.381064 6.187316 4.180328
# Visualización del resultado de agrupamiento con K-medoids.
fviz_cluster(object = pam_clusters, data = x, ellipse.type = "t",
repel = FALSE) +
theme_bw() +
labs(title = "Resultados clustering K-medoids k=3 clústeres") +
theme(legend.position = "none")
# matriz de confusión
t <- table(pam_clusters$cluster, df_clust$Target)
t
##
## 0 1
## 1 5 0
## 2 0 9
## 3 7 0
# K-medoids
pam_clusters <- pam(x, k = 2, metric = "manhattan")
#medoids obtenidos
pam_clusters$medoids
## Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## [1,] 0.6578645 0.05384006 0.3799601 0.9430894 0.8601190
## [2,] 0.8783008 0.29085339 0.5042572 0.5000000 0.3809524
## Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64
## [1,] 0.06732348 0.1744186 0.03968254
## [2,] 0.64039409 0.6843854 0.61269841
## Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso
## [1,] 0.05067064 0.1426914 0.0000000 0.1231471
## [2,] 0.56482861 0.5777262 0.6253823 0.1037628
## Num_Delitos_Pat Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas
## [1,] 0.16210375 0.02247191 0.1122254 0.8538263
## [2,] 0.09654179 0.03511236 0.0730659 0.1530525
## Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente
## [1,] 0.6022727 0.1602003 0.3728207 0.1671924
## [2,] 0.1511364 0.3992491 1.0000000 0.5226078
## Vivienda_Malo Vivienda_Ruina Num_Alquileres_Airbnb Target gent
## [1,] 0.0923913 0.0000000 0.05746581 0 2
## [2,] 0.4157609 0.4368932 0.06088526 1 1
# información de clústeres obtenidos
pam_clusters$clusinfo
## size max_diss av_diss diameter separation
## [1,] 10 10.784071 3.827416 11.68169 4.03382
## [2,] 11 6.679862 4.674453 10.22030 4.03382
# Visualización del resultado de agrupamiento con K-medoids.
fviz_cluster(object = pam_clusters, data = x, ellipse.type = "t",
repel = FALSE) +
theme_bw() +
labs(title = "Resultados clustering K-medoids k=2 clústeres") +
theme(legend.position = "none")